home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / programming / e / gencodee_v21.lha / GenCodeE / E / DemoGenCodeE21b / GUI.e < prev   
Text File  |  1994-11-15  |  7KB  |  212 lines

  1. /* ////////////////////////////////////////////////////////////////////////////
  2. //////////////////////////////////////////////////////// External modules /////
  3. //////////////////////////////////////////////////////////////////////////// */
  4. MODULE 'muimaster' , 'libraries/mui'
  5. MODULE 'intuition/classes', 'intuition/classusr'
  6. MODULE 'utility/tagitem' , 'utility/hooks'
  7.  
  8.  
  9. /* ////////////////////////////////////////////////////////////////////////////
  10. ////////////////////////////////////////////////////// Object definitions /////
  11. //////////////////////////////////////////////////////////////////////////// */
  12. OBJECT app_arexx
  13.     commands :    LONG
  14.     error    :    hook
  15. ENDOBJECT
  16.  
  17. OBJECT app_display
  18.     button_pressed          :    hook
  19. ENDOBJECT
  20.  
  21. OBJECT app_obj
  22.     app                     :    LONG
  23.     wi_the_window           :    LONG
  24.     bt_put_constant_string  :    LONG
  25.     bt_put_variable         :    LONG
  26.     bt_return_id            :    LONG
  27.     bt_call_hook            :    LONG
  28.     tx_result               :    LONG
  29.     bt_quit                 :    LONG
  30.     stR_TX_result           :    LONG
  31. ENDOBJECT
  32.  
  33.  
  34. /* ////////////////////////////////////////////////////////////////////////////
  35. //////////////////////////////////////////////////// Constant definitions /////
  36. //////////////////////////////////////////////////////////////////////////// */
  37. ENUM ID_BUTTON_PRESSED = 1
  38.  
  39.  
  40. /* ////////////////////////////////////////////////////////////////////////////
  41. ///////////// Creates one instance of one object or the whole application /////
  42. //////////////////////////////////////////////////////////////////////////// */
  43. PROC create_app( display : PTR TO app_display ,
  44.              icon ,
  45.              arexx : PTR TO app_arexx ,
  46.              menu )
  47.  
  48.     DEF grOUP_ROOT_0C , gr_grp_0 , gr_grp_1 , la_result , gr_grp_2
  49.     DEF tmp_object : PTR TO app_obj
  50.  
  51.     IF ( tmp_object := New( SIZEOF app_obj ) ) = NIL THEN RETURN NIL
  52.  
  53.     tmp_object.stR_TX_result           := 'Zzzzzzzzzzzzz'
  54.  
  55.     tmp_object.bt_put_constant_string := SimpleButton( 'Put _Constant String' )
  56.  
  57.     tmp_object.bt_put_variable := SimpleButton( 'Put _Variable' )
  58.  
  59.     tmp_object.bt_return_id := SimpleButton( '_Return ID' )
  60.  
  61.     tmp_object.bt_call_hook := SimpleButton( 'Call _Hook' )
  62.  
  63.     la_result := Label( 'Result' )
  64.  
  65.     tmp_object.tx_result := TextObject ,
  66.         MUIA_HelpNode , 'TX_result' ,
  67.         MUIA_Background , MUII_TextBack ,
  68.         MUIA_Frame , MUIV_Frame_Text ,
  69.         MUIA_Text_Contents , tmp_object.stR_TX_result ,
  70.         MUIA_Text_PreParse , '\el' ,
  71.         MUIA_Text_SetMin , MUI_TRUE ,
  72.     End
  73.  
  74.     gr_grp_1 := GroupObject ,
  75.         MUIA_Group_Horiz , MUI_TRUE ,
  76.         Child , la_result ,
  77.         Child , tmp_object.tx_result ,
  78.     End
  79.  
  80.     gr_grp_0 := GroupObject ,
  81.         MUIA_Frame , MUIV_Frame_Group ,
  82.         MUIA_FrameTitle , 'Click !' ,
  83.         Child , tmp_object.bt_put_constant_string ,
  84.         Child , tmp_object.bt_put_variable ,
  85.         Child , tmp_object.bt_return_id ,
  86.         Child , tmp_object.bt_call_hook ,
  87.         Child , gr_grp_1 ,
  88.     End
  89.  
  90.     tmp_object.bt_quit := SimpleButton( '_Quit' )
  91.  
  92.     gr_grp_2 := GroupObject ,
  93.         Child , tmp_object.bt_quit ,
  94.     End
  95.  
  96.     grOUP_ROOT_0C := GroupObject ,
  97.         Child , gr_grp_0 ,
  98.         Child , gr_grp_2 ,
  99.     End
  100.  
  101.     tmp_object.wi_the_window := WindowObject ,
  102.         MUIA_Window_Title , 'The window !' ,
  103.         MUIA_HelpNode , 'WI_the_window' ,
  104.         MUIA_Window_ID , "0WIN" ,
  105.         WindowContents , grOUP_ROOT_0C ,
  106.     End
  107.  
  108.     tmp_object.app := ApplicationObject ,
  109.         ( IF icon THEN MUIA_Application_DiskObject ELSE TAG_IGNORE ) , icon ,
  110.         ( IF arexx THEN MUIA_Application_Commands ELSE TAG_IGNORE ) , ( IF arexx THEN arexx.commands ELSE NIL ) ,
  111.         ( IF arexx THEN MUIA_Application_RexxHook ELSE TAG_IGNORE ) , ( IF arexx THEN arexx.error ELSE NIL ) ,
  112.         ( IF menu THEN MUIA_Application_Menu ELSE TAG_IGNORE ) , menu ,
  113.         MUIA_Application_Author , 'Lionel Vintenat' ,
  114.         MUIA_Application_Base , 'DEMOGENCODEE' ,
  115.         MUIA_Application_Title , 'DemoGenCodeE' ,
  116.         MUIA_Application_Version , '$VER: DemoGenCodeE 1.0 (01.09.94)' ,
  117.         MUIA_Application_Copyright , 'Public Domain !' ,
  118.         MUIA_Application_Description , 'Application example for GenCodeE' ,
  119.         SubWindow , tmp_object.wi_the_window ,
  120.     End
  121.  
  122.     IF tmp_object.app = NIL
  123.         Dispose( tmp_object )
  124.         tmp_object := NIL
  125.     ENDIF
  126.  
  127. ENDPROC tmp_object
  128.  
  129.  
  130. /* ////////////////////////////////////////////////////////////////////////////
  131. //////////////////////////// Disposes the object or the whole application /////
  132. //////////////////////////////////////////////////////////////////////////// */
  133. PROC dispose_app( tmp_object : PTR TO app_obj )
  134.  
  135.     IF tmp_object.app THEN Mui_DisposeObject( tmp_object.app )
  136.     Dispose( tmp_object )
  137.  
  138. ENDPROC
  139.  
  140.  
  141. /* ////////////////////////////////////////////////////////////////////////////
  142. ///////////////////////// Initializes all the notifications of one object /////
  143. ///////////////////////////////////////////// or of the whole application /////
  144. //////////////////////////////////////////////////////////////////////////// */
  145. PROC init_notifications_app( tmp_object : PTR TO app_obj , display : PTR TO app_display )
  146.  
  147.     domethod( tmp_object.bt_put_constant_string ,
  148.         [ MUIM_Notify , MUIA_Pressed , FALSE ,
  149.         tmp_object.tx_result ,
  150.         3 ,
  151.         MUIM_Set , MUIA_Text_Contents , 'Constant string put !' ] )
  152.  
  153.     domethod( tmp_object.bt_put_variable ,
  154.         [ MUIM_Notify , MUIA_Pressed , FALSE ,
  155.         tmp_object.tx_result ,
  156.         3 ,
  157.         MUIM_Set , MUIA_Text_Contents , string_var ] )
  158.  
  159.     domethod( tmp_object.bt_return_id ,
  160.         [ MUIM_Notify , MUIA_Pressed , FALSE ,
  161.         tmp_object.app ,
  162.         2 ,
  163.         MUIM_Application_ReturnID , ID_BUTTON_PRESSED ] )
  164.  
  165.     domethod( tmp_object.bt_call_hook ,
  166.         [ MUIM_Notify , MUIA_Pressed , FALSE ,
  167.         tmp_object.app ,
  168.         2 ,
  169.         MUIM_CallHook , display.button_pressed ] )
  170.  
  171.     domethod( tmp_object.bt_quit ,
  172.         [ MUIM_Notify , MUIA_Pressed , FALSE ,
  173.         tmp_object.app ,
  174.         2 ,
  175.         MUIM_Application_ReturnID , MUIV_Application_ReturnID_Quit ] )
  176.  
  177.     domethod( tmp_object.wi_the_window ,
  178.         [ MUIM_Window_SetCycleChain , tmp_object.bt_put_constant_string ,
  179.         tmp_object.bt_put_variable ,
  180.         tmp_object.bt_return_id ,
  181.         tmp_object.bt_call_hook ,
  182.         tmp_object.bt_quit ,
  183.         0 ] )
  184.  
  185.     set( tmp_object.wi_the_window ,
  186.         MUIA_Window_Open , MUI_TRUE )
  187.  
  188. ENDPROC
  189.  
  190.  
  191. /* ////////////////////////////////////////////////////////////////////////////
  192. /////////////////////////////////////////////////////// domethod function /////
  193. //////////////////////////////////////////////////////////////////////////// */
  194. PROC domethod( obj : PTR TO object , msg : PTR TO msg )
  195.  
  196.     DEF h : PTR TO hook , o : PTR TO object , dispatcher
  197.  
  198.     IF obj
  199.         o := obj-SIZEOF object        /* instance data is to negative offset */
  200.         h := o.class
  201.         dispatcher := h.entry        /* get dispatcher from hook in iclass */
  202.         MOVEA.L h,A0
  203.         MOVEA.L msg,A1
  204.         MOVEA.L obj,A2            /* probably should use CallHookPkt, but the */
  205.         MOVEA.L dispatcher,A3        /*   original code (DoMethodA()) doesn't. */
  206.         JSR (A3)            /* call classDispatcher() */
  207.         MOVE.L D0,o
  208.         RETURN o
  209.     ENDIF
  210.  
  211. ENDPROC NIL
  212.